Показано с 1 по 10 из 26

Тема: [VX Ace] Простые скрипты

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Хранитель Аватар для Paranoid
    Информация о пользователе
    Регистрация
    22.12.2014
    Сообщений
    2,776
    Записей в дневнике
    34
    Репутация: 28 Добавить или отнять репутацию

    Book Open [VX Ace] Простые скрипты

    Здесь я познакомплю вас со скриптами (или скриптовыми командами?), которые сделают вашу жизнь значительно проще, надеюсь. Да на мейкере многое можно провернуть через ивенты и стандартные команды, но порой они бывают невероятно мудреными и громозскими. А бывает что некоторые, казалось бы, простые фичи вообще нельзя реализовать используя стандартные функции.

    Предисловие: сначала я хотел выбрать самые полезные скрипты, но потом подумал "если у меня не хватило воображения чтобы применить их, это не значит что у других его не хватит!" Так что отчасти это будет копипаст с этого топика с русскими комментариями.

    Сообщения:
    Спойлер Текст:

    $game_message.face_name = 'fName' - название файла изображения актера
    $game_message.face_index = fIndex - индекс изображения актера 0-7
    $game_message.background = fBG - фон обычный(0), темный(1), прозрачный(2)
    $game_message.position = fPos - позиция верх(0), середина(1), низ(2)
    $game_message.add("Текст")


    Спойлер Ввод цифр:

    $game_message.num_input_variable_id = x - ID переменной в которую запишется ввод
    $game_message.num_input_digits_max = y - количество символов для ввода


    Спойлер Ключевой предмет:

    $game_message.item_choice_variable_id = x - ID переменной для записи


    Спойлер Прокрутка текста:

    $game_message.scroll_mode = true - стиль сообщения (true - прокрутка текста, false - обычное сообщение)
    $game_message.scroll_speed = x - скорость
    $game_message.scroll_no_fast = false - можно пропустить (true - нельзя, false - можно)
    $game_message.add("Текст") - строка текста


    Герои:
    Спойлер Изменить ХП/МП:

    Вот тут на забугорском сайте приводится довольно сложный пример, который я упростил.
    Меняем ХП $game_actors[n].hp += x и меняем МП $game_actors[n].mp += x, где n - ID героя, x - значение на

    которое сменить. В данном случае x прибавляется к текущему ХП/МП, но += можно заменить на -=, /=

    , *= и даже на =. Однако выше максимального значения вам их не поднять!

    Для всей партии используется
    $game_party.members.each { |actor| actor.hp += x } и $game_party.members.each { |actor| actor.hp += x }


    Спойлер Состояния:

    Добавить
    $game_actors[id].add_state(state_id), где state_id - ID состояния

    Убрать
    $game_actors[id].remove_state(state_id), где state_id - ID состояния

    Для группы соответственно
    $game_party.members.each { |actor| actor.add_state(state_id) }
    $game_party.members.each { |actor| actor.remove_state(state_id) }


    Спойлер Полное восстановление:

    $game_actors[n].recover_all, где n - ID героя

    Для группы
    $game_party.members.each { |actor| actor.recover_all }


    Спойлер Опыт:

    $game_actors[n].change_exp(x, show), где n - ID героя, x - значение опыта, show - true/false показывает или не показывает сообщение о повышении уровня. Здесь значение только присваивается, а не прибавляется к текущему опыту героя.

    Для группы
    $game_party.members.each { |actor| actor.change_exp(x, show) }, тоже самое, но можно заменить x на

    actor.exp + x, тогда опыт будет прибавляться к текущему значению.


    Спойлер Параметры:

    $game_actors[n].add_param(p, +/-x), где n - ID героя, x - значение параметра, p - ID параметра (0=MHP,

    1=MMP, 2=ATK, 3=DEF, 4=MAT, 5=MDF, 6=AGI, 7=LUK)

    Для группы
    $game_party.members.each { |actor| actor.add_param(p, +/-x) }


    Спойлер Навыки:

    $game_actors[n].learn_skill(s) - узнать навык
    $game_actors[n].forget_skill(s) - забыть навык
    где n - ID героя, s - ID навыка

    Для группы
    $game_party.members.each { |actor| actor.learn_skill(s) }
    $game_party.members.each { |actor| actor.forget_skill(s) }


    Спойлер Экипировка:

    $game_actors[n].change_equip_by_id(v, e), где n - ID героя, v - слот (0=weapon, 1=shield, 2=head, 3=body,

    4=accessory), e - ID предмета
    Предмет должен быть в инвентаре!


    Спойлер Имя:

    $game_actors[n].name = "текст", где n - ID героя


    Спойлер Класс:

    $game_actors[n].change_class(c), где n - ID героя, c - ID класса


    Спойлер Прозвище:

    $game_actors[n].nickname = "Текст", где n - ID героя


    Спойлер Золото:

    $game_party.gain_gold(x) - дать x золота (если значение отрицательно, то работает как lose)
    $game_party.lose_gold(x) - забрать х золота (если значение отрицательно, то работает как gain)


    Спойлер Предметы:

    n - ID предмета, х - количество (работает так же как и золото)
    $game_party.gain_item($data_items[n], x) - дать
    $game_party.lose_item($data_items[n], x) забрать
    Для оружия и брони заменить items на weapons и armors соответственно


    Спойлер Партия:

    n - ID героя, p - позиция (0 - лидер)
    $game_party.add_actor(n) - добавить
    $game_party.remove_actor(n) - убрать
    $game_party.remove_actor($game_party.members[p].id) - убрать героя с определенной позиции


    Игровой процесс:
    Спойлер Переменные:

    Переменные легко задавать через стандартные методы, но как записать в переменную слово? А вот как.
    $game_variables[n] = 'text', где n-номер переменной, а text-собственно текст. Можно использовать для паролей, храня их в переменных, а не в именах героев или записать в переменные, например, окончания слов. Тогда можно будет сделать различное обращение к персонажам мужского и женского пола.


    Спойлер Переключатели:

    Свитчи, точнее селф (локальные) свитчи. Стандартными методами вы можете включать и выключать селф свитчи только в самом событии, но не из других событий менять их невозможно и приходиться использовать кучу общих переключателей, захламляя базу. Но вот так можно обойтись и без них.
    $game_self_switches[[map, event, 'N']] = value, где map-ID карты, event-ID эвента, N- A-D
    При этом вы можете использовать @map_id-получает ID карты на которой вы находитесь и @event.id-получает ID эвента который использует скрипт.

    Обычный свитч $game_switches[n] = true/false, где n его номер


    Спойлер Таймер:

    $game_timer.start(sec * Graphics.frame_rate) - запуск, где sec время действия в секундах
    $game_timer.stop - остановка


    Спойлер Условие:

    # Стандартное условие
    if что-то происходит
    # делай дело
    else
    # делай дело
    end

    # Ветвление условий, если у вас много вариантов
    if что-то происходит
    # делай это
    elsif что-то еще происходит
    # делай дело
    elsif снова что-то происходит
    # делай дело
    elsif и опять
    # делай дело
    end


    Спойлер Общее событие:

    $game_temp.reserve_common_event(x) - x-ID события


    Движение:
    Спойлер Перемещение игрока:

    $game_temp.fade_type = fade
    $game_player.reserve_transfer(map_id, x, y, direction)
    Где fade изменение экрана = 0 черный, 1 белый, 2 без изменения
    map_id, x, y - ID карты и координаты куда переместить
    direction - направление [0] запомнить, [2] вниз, [4] влево, [6] вправо, [8] вверх


    Спойлер Транспорт:

    Преместить
    $game_map.vehicles[n].set_location(map_id, x, y)
    n - тип транспорта 0 лодка, 1 корабль, 2 дирижабль
    map_id, x, y - ID карты и координаты куда переместить

    Получить данные о транспорте
    $game_map.vehicles[n].x
    $game_map.vehicles[n].y
    n - тип транспорта 0 лодка, 1 корабль, 2 дирижабль


    Спойлер Перемещение события/игрока:

    $game_map.events[n].moveto(x, y) - для ивента
    $game_player.moveto(x, y) - для игрока (работает как $game_player.reserve_transfer(@map_id, x, y, 0))
    n - ID события
    x, y - новые координаты


    Спойлер Движение камеры:

    $game_map.start_scroll(direction, distance, speed)
    direction - направление [2] вниз, [4] влево, [6] вправо, [8] вверх
    distance - дистанция в квадратах мейкера
    speed - скорость [1] 1/8, [2] 1/4, [3] 1/2, [4] 1, [5] х2, [6] х4


    Спойлер Зайти/Выйти из транспорта:

    $game_player.get_on_off_vehicle = true/false


    Спойлер Ожидание:

    Ожидание для перемещения
    SceneManager.scene.wait(x), x - сколько кадров ждать
    Ожидания для остального
    x.times { Fiber.yield }, x - сколько кадров ждать


    Картинки и погода:
    Спойлер Показать картинку:

    screen.pictures[index].show(name, position, x, y, x zoom, y zoom, opacity, blend type)
    index - индекс картинки
    name - имя файла
    позиция - position = [0] по краю, [1] по центру
    x, y - координаты
    x zoom, y zoom - увеличение по x, y = масштаб
    opacity - прозрачность, для непрозрачности ставится 255
    смешивание - blend type = [0] обычное, [1] добавление, [2] замещение


    Спойлер Двигать картинку:

    screen.pictures[index].move(position, x, y, x zoom, y zoom, opacity, blend type, wait)
    index - индекс картинки
    position(позиция) = [0] по краю, [1] по центру
    x, y - координаты
    x zoom, y zoom - увеличение по x, y = масштаб
    opacity - прозрачность, для непрозрачности ставится 255
    blend type(смешивание) = [0] обычное, [1] добавление, [2] замещение
    wait - продолжительность движения, в кадрах


    Спойлер Вращать картинку:

    screen.pictures[index].rotate(s)
    index - индекс картинки
    s - скорость вращения


    Спойлер Оттенок картинки:

    screen.pictures[index].start_tone_change(Tone.new(0, 0, 0, 0), wait)
    index - индекс картинки
    Тон задается так же как и в окне, задаем вместо нулей
    wait - время ожидания в кадрах


    Спойлер Удалить картинку:

    Для событий на карте
    screen.pictures[index].erase
    index - индекс картинки


    Спойлер Погодные эффекты:

    $game_map.screen.change_weather(type, power, time)
    type(тип) = :none, :rain, :storm, :snow
    power(сила) - сила с которой будет идти погода
    time(время) - как быстро сменится погода, в кадрах
    По умолчанию сила не модет быть больше 10, но чем больше число, тем темнее экран, а больше 30 экран уже

    почти не видно.


    Персонаж:
    Спойлер Прозрачность:

    $game_player.transparent = true/false


    Спойлер Видимость группы:

    $game_player.followers.visible = true/false
    $game_player.refresh


    Спойлер Собрать группу:

    $game_player.followers.gather - все сопартийцы переходят в позицию игрока


    Спойлер Показать анимацию:

    Для персонажа
    $game_player.animation_id = n
    Для события
    $game_map.events[event_id].animation_id = n

    event_id - ID события
    n - ID анимации


    Спойлер Показать эмоцию:

    Для персонажа
    $game_player.balloon_id = n
    Для события
    $game_map.events[event_id].balloon_id = n

    event_id - ID события
    n - номер анимации от 1 до 10


    Спойлер Удалить событие:

    $game_map.events[event_id].erase
    event_id - ID события


    Экран:
    Спойлер Скрыть/Показать экран:

    Скрыть: screen.start_fadeout(n)
    Показать: screen.start_fadein(n)
    n - длительность, в кадрах


    Спойлер Цвет экрана:

    $game_map.screen.start_tone_change(Tone.new(255, 0, 0, 0), wait)
    Тон задается так же как и в окне, задаем вместо нулей
    wait - время ожидания в кадрах


    Спойлер Вспышка:

    screen.start_flash(Color.new(0,0,0,power), wait)
    Цвет задается так же как и в окне, задаем вместо нулей
    power - сила вспышки (прозрачность)
    wait - время ожидания в кадрах


    Спойлер Тряска:

    $game_map.screen.start_shake(power, speed, duration)
    power - сила тряски
    speed - скорость
    duration - время действия
    По умолчанию сила и скорость в мейкере выше 9.


    Музыка:
    Спойлер Проиграть BGM/ME/BGS/SE:

    RPG::BGM.new("BGM Name", volume, pitch).play
    RPG::ME.new("ME Name", volume, pitch).play
    RPG::BGS.new("BGS Name", volume, pitch).play
    RPG::SE.new("SE Name", volume, pitch).play
    Name - имя файла
    volume - громкость
    pitch - темп
    Проиграть BGM карты
    $game_map.autoplay
    Проиграть BGM битвы
    BattleManager.play_battle_bgm
    Проиграть ME победы
    BattleManager.play_battle_end_me


    Спойлер Сохранить/Вернуть/Остановить:

    Сохранить BGM
    $game_system.save_bgm
    Сохранить BGM и BGS
    BattleManager.save_bgm_and_bgs
    Возобновить BGM
    $game_system.replay_bgm
    Возобновить BGM и BGS
    BattleManager.replay_bgm_and_bgs
    Заглушить BGM/BGS/ME
    RPG::BGM.fade(time)
    RPG::BGS.fade(time)
    RPG::ME.fade(time)
    где time - время в кадрах
    Остановить BGM/BGS/ME/SE
    RPG::BGM.stop
    RPG::BGS.stop
    RPG::ME.stop
    RPG::SE.stop


    Контроль сцен:
    Спойлер Битва:

    BattleManager.setup(troop_id, esc, cont)
    BattleManager.event_proc = Proc.new {|n|
    @branch[@indent] = n }
    $game_player.make_encounter_count
    SceneManager.call(Scene_Battle)
    Fiber.yield

    troop_id - ID группы врагов
    esc - возможен ли побег true/false
    cont - продолжать после проигрыша true/false


    Спойлер Магазин:

    goods = [[type, id, price_flag(, price)]]
    SceneManager.call(Scene_Shop)
    SceneManager.scene.prepare(goods, true)
    type - тип предмета [0] вещи, [1] оружие, [2] броня
    id - ID предмета
    price_flag - флаг новой цены 0 если нет, 1 если есть
    price - своя цена, если флаг 1

    Например:
    goods = [[0,1,1,25],[0,2,0]] #первым в списке будет вещь с id 1 по новой цене 25, второй будет вещь с id 2 по цене из бд
    SceneManager.call(Scene_Shop)
    SceneManager.scene.prepare(goods, true)

    Можно использовать массив
    goods = []
    for id in 1..20
    goods.push([0, id, 0])
    end


    Спойлер Ввод имени:

    SceneManager.call(Scene_Name)
    SceneManager.scene.prepare(id, long)
    Fiber.yield
    id - ID персонажа, которому нужно ввести имя
    long - длинна имени


    Спойлер Вызов сцен:

    SceneManager.call(Scene_Save) - сохранение
    SceneManager.call(Scene_Load) - загрузка
    SceneManager.exit - выход
    SceneManager.call(Scene_Gameover) - конец игры

    Вот так можно вызвать любую сцену из списка в скриптах
    SceneManager.call(scene)
    scene - нужная вам сцена ( Scene_Menu, Scene_Item и так далее)


    Карта:
    Спойлер Показ имени карты:

    $game_map.name_display = true/false


    Спойлер Выбор тайлсета:

    $game_map.change_tileset(n)
    n - ID тайлсета


    Спойлер Выбрать фон битвы:

    $game_map.change_battleback("battleback1", "battleback2")
    battleback1 и battleback2 - названия файлов без расширения


    Спойлер Выбрать параллакс:

    $game_map.change_parallax("name", Loop_Hor, Loop_Ver, HScroll, VScroll)
    name - названия файла без расширения
    Loop_Hor, Loop_Ver - зацикленная прокрутка по горизонтали и вертикали true/false
    HScroll, VScroll - скорость автоматической прокрутки


    Спойлер Информация:

    Координаты игрока
    $game_player.x
    $game_player.y
    Координаты события
    $game_map.events[event_id].x
    $game_map.events[event_id].y
    event_id - ID события

    Тег территории
    $game_map.terrain_tag(x, y) - по координатам
    $game_player.terrain_tag - по местоположению игрока
    $game_map.events[event_id].terrain_tag - по местоположению события
    event_id - ID события

    Регион
    $game_map.region_id(x, y) - по координатам
    $game_player.region_id - по местоположению игрока
    $game_map.events[event_id].region_id - по местоположению события
    event_id - ID события

    Карта
    $game_map.name - имя карты
    $game_map.map_id - ID карты

    Видит ли игрок событие
    $game_map.events[event_id].near_the_player?
    event_id - ID события
    Принимает значение true/false если игрок в пределах 20 квадратов

    Сведения о событии
    $game_map.events[event_id].direction - направление события
    $game_map.event_id_xy(x, y) - id события по координатам


    Спойлер Выбрать графику:

    Для игрока
    $game_actors[actor_id].set_graphic("char_name", char_index, "face_name", face_index)
    $game_player.refresh
    actor_id - ID персонажа
    char_name - имя файла графики, без расширения
    char_index - индекс графики, начиная с 0
    face_name - имя файла лица, без расширения
    face_index - индекс лица, начиная с 0

    Для события
    $game_map.events[event_id].set_graphic("char_name", char_index)
    event_id - ID события
    char_name - имя файла графики, без расширения
    char_index - индекс графики, начиная с 0


    Дополнение:
    Спойлер Инструменты:

    Очистить карту от эффектов/тона/вспышки/тряски/погоды/картинки
    $game_map.screen.clear
    Очитить моментально
    $game_map.screen.clear_tone/shake/weather/pictures


    Спойлер Кнопки:

    К сожалению я так и не понял чем эти команды отличаются
    Input.trigger?(:A)
    Input.repeat?(:A)
    Input.press?(:A)


    Спойлер Дебагинг:

    Моментально использовать предмет, независимо от его наличия
    $game_actors[n].use_item($data_items[x]) - предмет x для персонажа с ID n
    $game_party.leader.use_item($data_items[x]) - предмет x лидера отряда
    $game_party.members[n].use_item($data_items[x]) - предмет x для члена партии с n по счету (лидер всегда 0)

    Узнать размер партии
    $game_party.members.size
    или
    $game_party.all_members.size

    Проверка доступа
    $game_actors[X].equips.include?($data_weapons[Y]) - надето ли на персонажа X орудие Y
    $game_actors[X].equips.include?($data_armors[Y]) - надето ли на персонажа X броня Y
    $game_actors[X].skills.include?($data_skills[Y]) - изучен ли у персонажа X навык Y
    $game_actors[X].states.include?($data_states[Y]) - висит ли на персонаже X эффект Y

    Получить Имя/Прозвище, ID класса, класс
    $game_actors[X].name - возвращает имя
    $game_actors[X].nickname - возвращает прозвище
    $game_actors[X].class.id - возвращает ID класса
    $game_actors[X].class.name - возвращает имя класса
    Последний раз редактировалось Paranoid; 13.04.2017 в 15:07.
    Лицензионный VX Ace. Спасибо Петр.
    2 года мукеризма в пустую.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
[VX Ace] Простые скрипты